package com.wuster.controller;


import com.wuster.entity.dto.*;
import com.wuster.entity.vo.DakaVO;
import com.wuster.entity.vo.FreeTimesVO;
import com.wuster.result.PageResult;
import com.wuster.result.Result;
import com.wuster.service.StudentService;
import com.wuster.utils.BaseContext;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;


@RestController
@RequestMapping("/student")
@Slf4j
public class StudentController {

    @Autowired
    private StudentService studentService;


    /**
     * 学生打卡 (前端设置传过来的字段不为空, 且格式为 14:30:00)
     * @param clockDTO
     * @return
     */
    @PostMapping("/timeManage/clock")
    public Result clock(@RequestBody ClockDTO clockDTO){
        log.info("开始打卡{}", clockDTO);
        studentService.toClock(clockDTO);
        return Result.success();
    }


    /**
     * 学生个人所有的打卡记录 -- 分页
     * @param pageDTO
     * @return
     */
    @PostMapping("/timeManage/record")
    public Result getRecords(@RequestBody PageDTO pageDTO){
        log.info("打卡记录分页查询{}", pageDTO);
        PageResult pageResult = studentService.selectPage(pageDTO);
        return Result.success(pageResult);
    }


    /**
     * 学生新增周报
     * @param reportDTO
     * @return
     */
    @PostMapping("/report/add")
    public Result addReport(@RequestBody ReportDTO reportDTO){
        log.info("学生id：{} 新增周报：{}", BaseContext.getCurrentId(), reportDTO);

        studentService.addReport(reportDTO);
        return Result.success();
    }


    /**
     * 学生查询周报    如果startDate、endtDate为空 则表示个人所有周报查询。不为空 则为条件查询
     * @param reportPageDTO
     * @return
     */
    @PostMapping("/report/query")
    public Result getReport(@RequestBody ReportPageDTO reportPageDTO){
        log.info("学生周报查询：" + reportPageDTO);

        PageResult pageResult = studentService.getReport(reportPageDTO.getStartDate(), reportPageDTO.getEndDate(), reportPageDTO.getPageId(), reportPageDTO.getPageSize());
        return Result.success(pageResult);
    }


    /**
     * 学生空闲时间查询
     * @param weekId
     * @return
     */
    @PostMapping("/getFreetimes")
    public Result getFreeTimes(@RequestParam Integer weekId){
        log.info("学生查询空闲时间{}", weekId);
        List<FreeTimesVO> freeList = studentService.getfree(weekId);
        return Result.success(freeList);
    }


    /**
     * 学生修改空闲时间段
     * @param freeUpdateDTOList
     * @return
     */
    @PostMapping("/setFreetimes")
    public Result setFreeTimes(@RequestBody FreeUpdateDTO[] freeUpdateDTOList){
        log.info("学生修改空闲时间{}", freeUpdateDTOList);
        studentService.setFreeTime(freeUpdateDTOList);
        return Result.success();
    }

}
